home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / etc / init.d / hdparm < prev    next >
Text File  |  2006-05-08  |  3KB  |  131 lines

  1. #!/sbin/runscript
  2. # METHOD
  3. # ------
  4. # if /dev/ide exists, find all block devices beneath it named disc, cd, or
  5. # generic.
  6. #
  7. # for the disc and cd ones, if there is a a matching /dev/hdX symlink and
  8. # hdX_args is set in the config file, use hdX_args.  otherwise, if there is a
  9. # matching /dev/discs/discX or /dev/cdroms/cdromX symlink, and discX_args or
  10. # cdromX_args is set in the config file, use discX_args / cdromX_args.  finally,
  11. # if all_args is set in the config file, use that.
  12. #
  13. # for the generic ones, sort them and look for genericX_args in the config file
  14. # or use all_args.
  15. #
  16. # if /dev/ide does not exist, check the /dev/hdX entries, and see which ones
  17. # correspond to real devices by opening them for reading.  then check hdX_args
  18. # and all_args in the config file.
  19. #
  20. # for each device considered, if no args are found in the config file, do not
  21. # run hdparm.
  22.  
  23. depend() {
  24.     before bootmisc
  25. }
  26.  
  27. do_hdparm() {
  28.     if [[ ${args:=$all_args} ]] ; then
  29.         local orgdevice=$(readlink -f ${device})
  30.         if [[ -b ${orgdevice} ]] ; then
  31.             ebegin "Running hdparm on ${device}"
  32.             hdparm ${args} ${device} > /dev/null
  33.             eend $?
  34.         fi
  35.     fi
  36. }
  37.  
  38. start() {
  39.  
  40.     if [ -e /dev/.devfs ] && [ -d /dev/ide ]
  41.     then
  42.  
  43.         # devfs compatible systems
  44.         for device in $(find /dev/ide -name disc)
  45.         do
  46.  
  47.             args=''
  48.  
  49.             for alias in /dev/hd?
  50.             do
  51.                 if [ $alias -ef $device ]
  52.                 then
  53.                     device=$alias
  54.                     eval args=\${`basename $alias`_args}
  55.                     break
  56.                 fi
  57.             done
  58.  
  59.             [ -z "$args" ] && for alias in /dev/discs/*
  60.             do
  61.                 if [ $alias/disc -ef $device ]
  62.                 then
  63.                     device=$alias/disc
  64.                     eval args=\${`basename $alias`_args}
  65.                     break
  66.                 fi
  67.             done
  68.  
  69.             do_hdparm
  70.  
  71.         done
  72.  
  73.         for device in $(find /dev/ide -name cd)
  74.         do
  75.  
  76.             args=''
  77.  
  78.             for alias in /dev/hd?
  79.             do
  80.                 if [ $alias -ef $device ]
  81.                 then
  82.                     device=$alias
  83.                     eval args=\${`basename $alias`_args}
  84.                     break
  85.                 fi
  86.             done
  87.  
  88.             [ -z "$args" ] && for alias in /dev/cdroms/*
  89.             do
  90.                 if [ $alias -ef $device ]
  91.                 then
  92.                     device=$alias
  93.                     eval args=\${`basename $alias`_args}
  94.                     break
  95.                 fi
  96.             done
  97.  
  98.             do_hdparm
  99.  
  100.         done
  101.  
  102.         let count=0
  103.         # of course, the sort approach would fail here if any of the
  104.         # host/bus/target/lun numbers reached 2 digits..
  105.         for device in $(find /dev/ide -name generic | sort)
  106.         do
  107.             eval args=\${generic${count}_args}
  108.             do_hdparm
  109.             let count=count+1
  110.         done
  111.  
  112.     else
  113.  
  114.         # non-devfs compatible system
  115.         for device in /dev/hd?
  116.         do
  117.             # check that the block device really exists
  118.             # by opening it for reading
  119.             local errmsg status
  120.             errmsg=$(: 2>&1 <$device)
  121.             status=$?
  122.             if [[ -b $device ]] && [[ ${status} == 0 || ${errmsg} == *": No medium found" ]]
  123.             then
  124.                 eval args=\${`basename $device`_args}
  125.                 do_hdparm
  126.             fi
  127.         done
  128.  
  129.     fi
  130. }
  131.